Welcome to my notebook covering the use of the tidycensus R package for extracting and evaluating census data in the state of Oregon. We are interested in uncovering the percentages of the population with graduate level degrees at a county level.

Start by importing the list of libraries that will assist us in connecting with the Census Bureau’s APIs and visualizing the desired data.
library(tidycensus) # connect with the census bureau API
library(tidyverse) # data wrangling
library(mapview) # spatial data visualizer
library(plotly) # graph / chart visualizer
library(ggiraph) # graph / chart visualizer
library(ggplot2)
library(DT)
library(scales)
library(sf)
We will use the get_acs() function from tidycensus package to pull data from the census bureau. The function defaults to the 2017-2021 5-year ACS dataset. Which is necessary for us, since there are a list of counties in Oregon with a population of less than 65,000.
# Data objects needed
or_grads <- get_acs(
  geography = "county",
  variables = "DP02_0066P", 
  state = "OR",
  year = 2021,
)

or_grads_table <- or_grads %>%
  separate(NAME, into = c("county", "state"), sep = ", ") %>%
  arrange(-estimate) %>%
  select(county, estimate, moe)
We have our results in a table and we can filter through to see all counties with their percent of population with graduate degrees. Lets use the datatable() function from the DT library to provide a bit more interactivity for previewing the results.
# function from the DT library
datatable(or_grads_table)
Top 3 counties –

  • Benton
  • Multnomah
  • Washington

Bottom 3 counties –

  • Malheur
  • Gilliam
  • Morrow
or_plot <- ggplot(or_grads_table, aes(x = estimate,
                                      y = reorder(county, estimate))) + 
  geom_point(color="navy", size = 3) +
  scale_x_continuous(labels = function(x) paste0(x, '%')) +
  scale_y_discrete(labels = function(x) str_remove(x, " County")) +
  labs(title = "% Population with graduate degrees, 2017-2021 ACS",
       subtitle = "Counties in Oregon",
       caption = "Data acquired with R and tidycensus",
       x = "ACS estimate",
       y = "") +
  theme_minimal(base_size = 12)
  
or_plot

or_plot_errorbar <- ggplot(or_grads, aes(x = estimate, y = reorder(NAME, estimate))) +
  geom_errorbar(aes(xmin = estimate - moe, xmax = estimate + moe), 
                width = 0.5, linewidth = 0.5) +
  geom_point(color = "gold", size = 3) +
  scale_x_continuous(labels = function(x) paste0(x, '%')) +
  scale_y_discrete(labels = function(x) str_remove(x, " County, Oregon|, Oregon")) +
  labs(title = "% Population with graduate degrees, 2017-2021 ACS",
       subtitle = "Counties in Oregon",
       caption = "Data acquired with R and tidycensus. Error bars represent margin of error around estimates.",
       "ACS estimate",
      y = "",
      x = "Percentage") +
  theme_minimal(base_size = 12)
  
or_plot_errorbar

or_income <- get_acs(
  geography = "county",
  variables = "B19013A_001",
  state = "OR",
  year = 2021,
  geometry = TRUE
)
Getting data from the 2017-2021 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
Using FIPS code '41' for state 'OR'

  |                                                                                           
  |                                                                                     |   0%
  |                                                                                           
  |                                                                                     |   1%
  |                                                                                           
  |=                                                                                    |   1%
  |                                                                                           
  |=                                                                                    |   2%
  |                                                                                           
  |==                                                                                   |   2%
  |                                                                                           
  |==                                                                                   |   3%
  |                                                                                           
  |===                                                                                  |   3%
  |                                                                                           
  |===                                                                                  |   4%
  |                                                                                           
  |====                                                                                 |   4%
  |                                                                                           
  |====                                                                                 |   5%
  |                                                                                           
  |=====                                                                                |   5%
  |                                                                                           
  |=====                                                                                |   6%
  |                                                                                           
  |======                                                                               |   6%
  |                                                                                           
  |======                                                                               |   7%
  |                                                                                           
  |======                                                                               |   8%
  |                                                                                           
  |=======                                                                              |   8%
  |                                                                                           
  |=======                                                                              |   9%
  |                                                                                           
  |========                                                                             |   9%
  |                                                                                           
  |========                                                                             |  10%
  |                                                                                           
  |=========                                                                            |  10%
  |                                                                                           
  |=========                                                                            |  11%
  |                                                                                           
  |==========                                                                           |  11%
  |                                                                                           
  |==========                                                                           |  12%
  |                                                                                           
  |===========                                                                          |  12%
  |                                                                                           
  |===========                                                                          |  13%
  |                                                                                           
  |===========                                                                          |  14%
  |                                                                                           
  |============                                                                         |  14%
  |                                                                                           
  |============                                                                         |  15%
  |                                                                                           
  |=============                                                                        |  15%
  |                                                                                           
  |=============                                                                        |  16%
  |                                                                                           
  |==============                                                                       |  16%
  |                                                                                           
  |==============                                                                       |  17%
  |                                                                                           
  |===============                                                                      |  17%
  |                                                                                           
  |===============                                                                      |  18%
  |                                                                                           
  |================                                                                     |  18%
  |                                                                                           
  |================                                                                     |  19%
  |                                                                                           
  |=================                                                                    |  19%
  |                                                                                           
  |=================                                                                    |  20%
  |                                                                                           
  |=================                                                                    |  21%
  |                                                                                           
  |==================                                                                   |  21%
  |                                                                                           
  |==================                                                                   |  22%
  |                                                                                           
  |===================                                                                  |  22%
  |                                                                                           
  |===================                                                                  |  23%
  |                                                                                           
  |====================                                                                 |  23%
  |                                                                                           
  |====================                                                                 |  24%
  |                                                                                           
  |=====================                                                                |  24%
  |                                                                                           
  |=====================                                                                |  25%
  |                                                                                           
  |======================                                                               |  25%
  |                                                                                           
  |======================                                                               |  26%
  |                                                                                           
  |=======================                                                              |  26%
  |                                                                                           
  |=======================                                                              |  27%
  |                                                                                           
  |=======================                                                              |  28%
  |                                                                                           
  |========================                                                             |  28%
  |                                                                                           
  |========================                                                             |  29%
  |                                                                                           
  |=========================                                                            |  29%
  |                                                                                           
  |=========================                                                            |  30%
  |                                                                                           
  |==========================                                                           |  30%
  |                                                                                           
  |==========================                                                           |  31%
  |                                                                                           
  |===========================                                                          |  31%
  |                                                                                           
  |===========================                                                          |  32%
  |                                                                                           
  |============================                                                         |  32%
  |                                                                                           
  |============================                                                         |  33%
  |                                                                                           
  |=============================                                                        |  34%
  |                                                                                           
  |=============================                                                        |  35%
  |                                                                                           
  |==============================                                                       |  35%
  |                                                                                           
  |==============================                                                       |  36%
  |                                                                                           
  |===============================                                                      |  36%
  |                                                                                           
  |===============================                                                      |  37%
  |                                                                                           
  |================================                                                     |  37%
  |                                                                                           
  |================================                                                     |  38%
  |                                                                                           
  |=================================                                                    |  39%
  |                                                                                           
  |==================================                                                   |  40%
  |                                                                                           
  |==================================                                                   |  41%
  |                                                                                           
  |===================================                                                  |  41%
  |                                                                                           
  |===================================                                                  |  42%
  |                                                                                           
  |====================================                                                 |  42%
  |                                                                                           
  |====================================                                                 |  43%
  |                                                                                           
  |=====================================                                                |  43%
  |                                                                                           
  |=====================================                                                |  44%
  |                                                                                           
  |======================================                                               |  44%
  |                                                                                           
  |======================================                                               |  45%
  |                                                                                           
  |=======================================                                              |  46%
  |                                                                                           
  |========================================                                             |  47%
  |                                                                                           
  |========================================                                             |  48%
  |                                                                                           
  |=========================================                                            |  48%
  |                                                                                           
  |=========================================                                            |  49%
  |                                                                                           
  |==========================================                                           |  49%
  |                                                                                           
  |==========================================                                           |  50%
  |                                                                                           
  |===========================================                                          |  50%
  |                                                                                           
  |===========================================                                          |  51%
  |                                                                                           
  |============================================                                         |  51%
  |                                                                                           
  |============================================                                         |  52%
  |                                                                                           
  |=============================================                                        |  53%
  |                                                                                           
  |==============================================                                       |  54%
  |                                                                                           
  |===============================================                                      |  55%
  |                                                                                           
  |===============================================                                      |  56%
  |                                                                                           
  |================================================                                     |  56%
  |                                                                                           
  |================================================                                     |  57%
  |                                                                                           
  |=================================================                                    |  57%
  |                                                                                           
  |=================================================                                    |  58%
  |                                                                                           
  |==================================================                                   |  59%
  |                                                                                           
  |===================================================                                  |  60%
  |                                                                                           
  |====================================================                                 |  61%
  |                                                                                           
  |=====================================================                                |  62%
  |                                                                                           
  |=====================================================                                |  63%
  |                                                                                           
  |======================================================                               |  63%
  |                                                                                           
  |======================================================                               |  64%
  |                                                                                           
  |=======================================================                              |  64%
  |                                                                                           
  |=======================================================                              |  65%
  |                                                                                           
  |========================================================                             |  66%
  |                                                                                           
  |=========================================================                            |  67%
  |                                                                                           
  |==========================================================                           |  68%
  |                                                                                           
  |==========================================================                           |  69%
  |                                                                                           
  |===========================================================                          |  69%
  |                                                                                           
  |===========================================================                          |  70%
  |                                                                                           
  |============================================================                         |  70%
  |                                                                                           
  |============================================================                         |  71%
  |                                                                                           
  |=============================================================                        |  71%
  |                                                                                           
  |=============================================================                        |  72%
  |                                                                                           
  |==============================================================                       |  72%
  |                                                                                           
  |==============================================================                       |  73%
  |                                                                                           
  |===============================================================                      |  74%
  |                                                                                           
  |===============================================================                      |  75%
  |                                                                                           
  |================================================================                     |  75%
  |                                                                                           
  |================================================================                     |  76%
  |                                                                                           
  |=================================================================                    |  76%
  |                                                                                           
  |=================================================================                    |  77%
  |                                                                                           
  |==================================================================                   |  77%
  |                                                                                           
  |==================================================================                   |  78%
  |                                                                                           
  |===================================================================                  |  78%
  |                                                                                           
  |===================================================================                  |  79%
  |                                                                                           
  |====================================================================                 |  80%
  |                                                                                           
  |=====================================================================                |  81%
  |                                                                                           
  |=====================================================================                |  82%
  |                                                                                           
  |======================================================================               |  82%
  |                                                                                           
  |======================================================================               |  83%
  |                                                                                           
  |=======================================================================              |  83%
  |                                                                                           
  |=======================================================================              |  84%
  |                                                                                           
  |========================================================================             |  84%
  |                                                                                           
  |========================================================================             |  85%
  |                                                                                           
  |=========================================================================            |  85%
  |                                                                                           
  |=========================================================================            |  86%
  |                                                                                           
  |==========================================================================           |  86%
  |                                                                                           
  |==========================================================================           |  87%
  |                                                                                           
  |==========================================================================           |  88%
  |                                                                                           
  |===========================================================================          |  88%
  |                                                                                           
  |===========================================================================          |  89%
  |                                                                                           
  |============================================================================         |  89%
  |                                                                                           
  |============================================================================         |  90%
  |                                                                                           
  |=============================================================================        |  90%
  |                                                                                           
  |=============================================================================        |  91%
  |                                                                                           
  |==============================================================================       |  91%
  |                                                                                           
  |==============================================================================       |  92%
  |                                                                                           
  |===============================================================================      |  92%
  |                                                                                           
  |===============================================================================      |  93%
  |                                                                                           
  |================================================================================     |  94%
  |                                                                                           
  |================================================================================     |  95%
  |                                                                                           
  |=================================================================================    |  95%
  |                                                                                           
  |=================================================================================    |  96%
  |                                                                                           
  |==================================================================================   |  96%
  |                                                                                           
  |==================================================================================   |  97%
  |                                                                                           
  |===================================================================================  |  97%
  |                                                                                           
  |===================================================================================  |  98%
  |                                                                                           
  |==================================================================================== |  98%
  |                                                                                           
  |==================================================================================== |  99%
  |                                                                                           
  |=====================================================================================| 100%
or_house <- get_acs(
  geography = "county",
  variables = "B25105_001",
  state = "OR",
  year = 2021,
  geometry = TRUE
)
Getting data from the 2017-2021 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
Using FIPS code '41' for state 'OR'
ggplotly(or_plot_errorbar, tooltip = "x")
NA
# Data objects needed
or_grads_geom <- get_acs(
  geography = "county",
  variables = "DP02_0066P", 
  state = "OR",
  year = 2021,
  geometry = TRUE
)



ggplot() + # use ggplot to create the plot.
    geom_sf(data = or_grads_geom, # use geom_sf to plot the polyline geometry.
            aes(fill = as.factor(estimate)),
            linewidth = 0.4) + # color based on year.
    scale_color_discrete(name = "estimate") + # set color scale
    coord_sf(datum = NA) + # put geometries on the same coordinate reference system
    theme_void()
# median salary for computer programmers across the country
#income_variables <- "B24121_067"

# populatiion for computer programmers
#pop_variables <- "B24114_067"

renter_bachelors<- get_acs(
  geography = "tract",
  variables = "B25013_011",
  state = "OR",
  year = 2021,
  geometry = TRUE
)
Getting data from the 2017-2021 5-year ACS
Using FIPS code '41' for state 'OR'
View(renter_bachelors)

# figure out decennial data, and join total population against renter occupied housing number, find % across the country


doctorates<- get_decennial(
  geography = "block",
  variables = "B15003_025",
  year = 2020,
  geometry = TRUE
)

View(doctorates)
options(tigris_use_cache = TRUE)
#B25013_011
#Estimate!!Total:!!Renter-occupied housing units:!!Bachelor's degree or higher
#TENURE BY EDUCATIONAL ATTAINMENT OF HOUSEHOLDER

or <- get_decennial(geography = "tract", variables = "B25013_011", year = 2020, state = "OR", geometry = TRUE)
Getting data from the 2020 decennial Census
Using FIPS code '41' for state 'OR'
Using the PL 94-171 Redistricting Data Summary File
Error in UseMethod("gather") : 
  no applicable method for 'gather' applied to an object of class "character"
LS0tDQp0aXRsZTogIkhpZ2hlciBlZHVjYXRpb24gJSBpbiBPcmVnb24gLSBBbGlzIHZvbGF0IHByb3ByaWlzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCiMjIyMgV2VsY29tZSB0byBteSBub3RlYm9vayBjb3ZlcmluZyB0aGUgdXNlIG9mIHRoZSB0aWR5Y2Vuc3VzIFIgcGFja2FnZSBmb3IgZXh0cmFjdGluZyBhbmQgZXZhbHVhdGluZyBjZW5zdXMgZGF0YSBpbiB0aGUgc3RhdGUgb2YgT3JlZ29uLiBXZSBhcmUgaW50ZXJlc3RlZCBpbiB1bmNvdmVyaW5nIHRoZSBwZXJjZW50YWdlcyBvZiB0aGUgcG9wdWxhdGlvbiB3aXRoIGdyYWR1YXRlIGxldmVsIGRlZ3JlZXMgYXQgYSBjb3VudHkgbGV2ZWwuIA0KDQojIyMjIyBTdGFydCBieSBpbXBvcnRpbmcgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHRoYXQgd2lsbCBhc3Npc3QgdXMgaW4gY29ubmVjdGluZyB3aXRoIHRoZSBDZW5zdXMgQnVyZWF1J3MgQVBJcyBhbmQgdmlzdWFsaXppbmcgdGhlIGRlc2lyZWQgZGF0YS4gDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KcCB7DQogIG1hcmdpbi1ib3R0b206IDBweDsNCn0NCmBgYA0KYGBge3IgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9DQpsaWJyYXJ5KHRpZHljZW5zdXMpICMgY29ubmVjdCB3aXRoIHRoZSBjZW5zdXMgYnVyZWF1IEFQSQ0KbGlicmFyeSh0aWR5dmVyc2UpICMgZGF0YSB3cmFuZ2xpbmcNCmxpYnJhcnkobWFwdmlldykgIyBzcGF0aWFsIGRhdGEgdmlzdWFsaXplcg0KbGlicmFyeShwbG90bHkpICMgZ3JhcGggLyBjaGFydCB2aXN1YWxpemVyDQpsaWJyYXJ5KGdnaXJhcGgpICMgZ3JhcGggLyBjaGFydCB2aXN1YWxpemVyDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHNmKQ0KYGBgDQojIyMjIyBXZSB3aWxsIHVzZSB0aGUgZ2V0X2FjcygpIGZ1bmN0aW9uIGZyb20gdGlkeWNlbnN1cyBwYWNrYWdlIHRvIHB1bGwgZGF0YSBmcm9tIHRoZSBjZW5zdXMgYnVyZWF1LiBUaGUgZnVuY3Rpb24gZGVmYXVsdHMgdG8gdGhlIDIwMTctMjAyMSA1LXllYXIgQUNTIGRhdGFzZXQuIFdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgdXMsIHNpbmNlIHRoZXJlIGFyZSBhIGxpc3Qgb2YgY291bnRpZXMgaW4gT3JlZ29uIHdpdGggYSBwb3B1bGF0aW9uIG9mIGxlc3MgdGhhbiA2NSwwMDAuIA0KYGBge3IgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9DQojIERhdGEgb2JqZWN0cyBuZWVkZWQNCm9yX2dyYWRzIDwtIGdldF9hY3MoDQogIGdlb2dyYXBoeSA9ICJjb3VudHkiLA0KICB2YXJpYWJsZXMgPSAiRFAwMl8wMDY2UCIsIA0KICBzdGF0ZSA9ICJPUiIsDQogIHllYXIgPSAyMDIxLA0KKQ0KDQpvcl9ncmFkc190YWJsZSA8LSBvcl9ncmFkcyAlPiUNCiAgc2VwYXJhdGUoTkFNRSwgaW50byA9IGMoImNvdW50eSIsICJzdGF0ZSIpLCBzZXAgPSAiLCAiKSAlPiUNCiAgYXJyYW5nZSgtZXN0aW1hdGUpICU+JQ0KICBzZWxlY3QoY291bnR5LCBlc3RpbWF0ZSwgbW9lKQ0KYGBgDQojIyMjIyBXZSBoYXZlIG91ciByZXN1bHRzIGluIGEgdGFibGUgYW5kIHdlIGNhbiBmaWx0ZXIgdGhyb3VnaCB0byBzZWUgYWxsIGNvdW50aWVzIHdpdGggdGhlaXIgcGVyY2VudCBvZiBwb3B1bGF0aW9uIHdpdGggZ3JhZHVhdGUgZGVncmVlcy4gTGV0cyB1c2UgdGhlIGRhdGF0YWJsZSgpIGZ1bmN0aW9uIGZyb20gdGhlIERUIGxpYnJhcnkgdG8gcHJvdmlkZSBhIGJpdCBtb3JlIGludGVyYWN0aXZpdHkgZm9yIHByZXZpZXdpbmcgdGhlIHJlc3VsdHMuDQpgYGB7cn0NCiMgZnVuY3Rpb24gZnJvbSB0aGUgRFQgbGlicmFyeQ0KZGF0YXRhYmxlKG9yX2dyYWRzX3RhYmxlKQ0KYGBgDQojIyMjIyBUb3AgMyBjb3VudGllcyAtLQ0KPGhyIC8+DQoqIEJlbnRvbg0KKiBNdWx0bm9tYWgNCiogV2FzaGluZ3Rvbg0KDQo8aHIgLz4NCg0KIyMjIyMgQm90dG9tIDMgY291bnRpZXMgLS0NCjxociAvPg0KKiBNYWxoZXVyDQoqIEdpbGxpYW0NCiogTW9ycm93DQpgYGB7ciBmaWcuaGVpZ2h0PTZ9DQpvcl9wbG90IDwtIGdncGxvdChvcl9ncmFkc190YWJsZSwgYWVzKHggPSBlc3RpbWF0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY291bnR5LCBlc3RpbWF0ZSkpKSArIA0KICBnZW9tX3BvaW50KGNvbG9yPSJuYXZ5Iiwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIHBhc3RlMCh4LCAnJScpKSArDQogIHNjYWxlX3lfZGlzY3JldGUobGFiZWxzID0gZnVuY3Rpb24oeCkgc3RyX3JlbW92ZSh4LCAiIENvdW50eSIpKSArDQogIGxhYnModGl0bGUgPSAiJSBQb3B1bGF0aW9uIHdpdGggZ3JhZHVhdGUgZGVncmVlcywgMjAxNy0yMDIxIEFDUyIsDQogICAgICAgc3VidGl0bGUgPSAiQ291bnRpZXMgaW4gT3JlZ29uIiwNCiAgICAgICBjYXB0aW9uID0gIkRhdGEgYWNxdWlyZWQgd2l0aCBSIGFuZCB0aWR5Y2Vuc3VzIiwNCiAgICAgICB4ID0gIkFDUyBlc3RpbWF0ZSIsDQogICAgICAgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpDQogIA0Kb3JfcGxvdA0KYGBgDQpgYGB7ciBmaWcuaGVpZ2h0PTZ9DQpvcl9wbG90X2Vycm9yYmFyIDwtIGdncGxvdChvcl9ncmFkcywgYWVzKHggPSBlc3RpbWF0ZSwgeSA9IHJlb3JkZXIoTkFNRSwgZXN0aW1hdGUpKSkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh4bWluID0gZXN0aW1hdGUgLSBtb2UsIHhtYXggPSBlc3RpbWF0ZSArIG1vZSksIA0KICAgICAgICAgICAgICAgIHdpZHRoID0gMC41LCBsaW5ld2lkdGggPSAwLjUpICsNCiAgZ2VvbV9wb2ludChjb2xvciA9ICJnb2xkIiwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIHBhc3RlMCh4LCAnJScpKSArDQogIHNjYWxlX3lfZGlzY3JldGUobGFiZWxzID0gZnVuY3Rpb24oeCkgc3RyX3JlbW92ZSh4LCAiIENvdW50eSwgT3JlZ29ufCwgT3JlZ29uIikpICsNCiAgbGFicyh0aXRsZSA9ICIlIFBvcHVsYXRpb24gd2l0aCBncmFkdWF0ZSBkZWdyZWVzLCAyMDE3LTIwMjEgQUNTIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyBpbiBPcmVnb24iLA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBhY3F1aXJlZCB3aXRoIFIgYW5kIHRpZHljZW5zdXMuIEVycm9yIGJhcnMgcmVwcmVzZW50IG1hcmdpbiBvZiBlcnJvciBhcm91bmQgZXN0aW1hdGVzLiIsDQogICAgICAgIkFDUyBlc3RpbWF0ZSIsDQogICAgICB5ID0gIiIsDQogICAgICB4ID0gIlBlcmNlbnRhZ2UiKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpDQogIA0Kb3JfcGxvdF9lcnJvcmJhcg0KYGBgDQpgYGB7cn0NCm9yX2luY29tZSA8LSBnZXRfYWNzKA0KICBnZW9ncmFwaHkgPSAiY291bnR5IiwNCiAgdmFyaWFibGVzID0gIkIxOTAxM0FfMDAxIiwNCiAgc3RhdGUgPSAiT1IiLA0KICB5ZWFyID0gMjAyMSwNCiAgZ2VvbWV0cnkgPSBUUlVFDQopDQpgYGANCmBgYHtyfQ0Kb3JfaG91c2UgPC0gZ2V0X2FjcygNCiAgZ2VvZ3JhcGh5ID0gImNvdW50eSIsDQogIHZhcmlhYmxlcyA9ICJCMjUxMDVfMDAxIiwNCiAgc3RhdGUgPSAiT1IiLA0KICB5ZWFyID0gMjAyMSwNCiAgZ2VvbWV0cnkgPSBUUlVFDQopDQoNCg0KYGBgDQpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD05LjV9DQpnZ3Bsb3RseShvcl9wbG90X2Vycm9yYmFyLCB0b29sdGlwID0gIngiKQ0KDQpgYGANCg0KYGBge3IgIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQ0KIyBEYXRhIG9iamVjdHMgbmVlZGVkDQpvcl9ncmFkc19nZW9tIDwtIGdldF9hY3MoDQogIGdlb2dyYXBoeSA9ICJjb3VudHkiLA0KICB2YXJpYWJsZXMgPSAiRFAwMl8wMDY2UCIsIA0KICBzdGF0ZSA9ICJPUiIsDQogIHllYXIgPSAyMDIxLA0KICBnZW9tZXRyeSA9IFRSVUUNCikNCg0KDQoNCmdncGxvdCgpICsgIyB1c2UgZ2dwbG90IHRvIGNyZWF0ZSB0aGUgcGxvdC4NCiAgICBnZW9tX3NmKGRhdGEgPSBvcl9ncmFkc19nZW9tLCAjIHVzZSBnZW9tX3NmIHRvIHBsb3QgdGhlIHBvbHlsaW5lIGdlb21ldHJ5Lg0KICAgICAgICAgICAgYWVzKGZpbGwgPSBhcy5mYWN0b3IoZXN0aW1hdGUpKSwNCiAgICAgICAgICAgIGxpbmV3aWR0aCA9IDAuNCkgKyAjIGNvbG9yIGJhc2VkIG9uIHllYXIuDQogICAgc2NhbGVfY29sb3JfZGlzY3JldGUobmFtZSA9ICJlc3RpbWF0ZSIpICsgIyBzZXQgY29sb3Igc2NhbGUNCiAgICBjb29yZF9zZihkYXR1bSA9IE5BKSArICMgcHV0IGdlb21ldHJpZXMgb24gdGhlIHNhbWUgY29vcmRpbmF0ZSByZWZlcmVuY2Ugc3lzdGVtDQogICAgdGhlbWVfdm9pZCgpDQpgYGANCmBgYHtyfQ0KIyBtZWRpYW4gc2FsYXJ5IGZvciBjb21wdXRlciBwcm9ncmFtbWVycyBhY3Jvc3MgdGhlIGNvdW50cnkNCiNpbmNvbWVfdmFyaWFibGVzIDwtICJCMjQxMjFfMDY3Ig0KDQojIHBvcHVsYXRpaW9uIGZvciBjb21wdXRlciBwcm9ncmFtbWVycw0KI3BvcF92YXJpYWJsZXMgPC0gIkIyNDExNF8wNjciDQoNCnJlbnRlcl9iYWNoZWxvcnM8LSBnZXRfYWNzKA0KICBnZW9ncmFwaHkgPSAidHJhY3QiLA0KICB2YXJpYWJsZXMgPSAiQjI1MDEzXzAxMSIsDQogIHN0YXRlID0gIk9SIiwNCiAgeWVhciA9IDIwMjEsDQogIGdlb21ldHJ5ID0gVFJVRQ0KKQ0KDQpWaWV3KHJlbnRlcl9iYWNoZWxvcnMpDQpgYGANCmBgYHtyfQ0KDQojIGZpZ3VyZSBvdXQgZGVjZW5uaWFsIGRhdGEsIGFuZCBqb2luIHRvdGFsIHBvcHVsYXRpb24gYWdhaW5zdCByZW50ZXIgb2NjdXBpZWQgaG91c2luZyBudW1iZXIsIGZpbmQgJSBhY3Jvc3MgdGhlIGNvdW50cnkNCg0KDQpkb2N0b3JhdGVzPC0gZ2V0X2RlY2VubmlhbCgNCiAgZ2VvZ3JhcGh5ID0gImJsb2NrIiwNCiAgdmFyaWFibGVzID0gIkIxNTAwM18wMjUiLA0KICB5ZWFyID0gMjAyMCwNCiAgZ2VvbWV0cnkgPSBUUlVFDQopDQoNClZpZXcoZG9jdG9yYXRlcykNCmBgYA0KYGBge3J9DQpvcHRpb25zKHRpZ3Jpc191c2VfY2FjaGUgPSBUUlVFKQ0KI0IyNTAxM18wMTENCiNFc3RpbWF0ZSEhVG90YWw6ISFSZW50ZXItb2NjdXBpZWQgaG91c2luZyB1bml0czohIUJhY2hlbG9yJ3MgZGVncmVlIG9yIGhpZ2hlcg0KI1RFTlVSRSBCWSBFRFVDQVRJT05BTCBBVFRBSU5NRU5UIE9GIEhPVVNFSE9MREVSDQoNCm9yIDwtIGdldF9kZWNlbm5pYWwoZ2VvZ3JhcGh5ID0gInRyYWN0IiwgdmFyaWFibGVzID0gIkIyNTAxM18wMTEiLCB5ZWFyID0gMjAyMCwgc3RhdGUgPSAiT1IiLCBnZW9tZXRyeSA9IFRSVUUpDQogICNtdXRhdGUocGN0ID0gMTAwICogKHZhbHVlIC8gc3VtbWFyeV92YWx1ZSkpDQoNCmdncGxvdChvciwgYWVzKGZpbGwgPSBwY3QsIGNvbG9yID0gcGN0KSkgKw0KICBnZW9tX3NmKCkgDQogICNmYWNldF93cmFwKH52YXJpYWJsZSkNCmBgYA==